/**
 * @description Ccay主命名空间
 * @type {Object}
 */

var Ccay ={
	Core:{
		beforeFoward : $.Callbacks(),
		afterFoward : $.Callbacks()
	},
	UI:{
		Resizes : $.Callbacks(),
		Renders : $.Callbacks()
	},
	Init:{
		AfterCore: $.Callbacks("once"),
		AfterUI: $.Callbacks("once"),
		AfterSystem: $.Callbacks("once"),
		Complete: $.Callbacks("once")
	}
	
};
//兼容以前版本
Ccay._Init = Ccay.Init.AfterCore;


$.ajaxSetup({
	  cache: true,
	  beforeSend:function(xhr){
	  	
	  	 var url = this.url,that=this,config =Ccay.Config, rootUrl = config.Global.rootUrl,workspace=workspaceVO;
	  	if( url.indexOf(rootUrl) == 0 || 
			  			(url.indexOf("http://") != 0 
				  			&& url.indexOf("https://") !=0 
				  			&& url.indexOf("/") !=0 
				  			&& url.indexOf("../") !=0
			  			)
	  		){
	  			var appVersion = config.Global.appVersion,
	  			 serviceCacheList = workspace.serviceCacheList;
	  			if(appVersion&& url.indexOf(".js", url.length - 3) != -1 && url.indexOf("?") == -1){
		  			//排除在web.xml配置的exclude的目录下的js文件
		  			var exclusions = workspace.envBean.exclusions,tmp;
		  			if(exclusions){
		  				tmp = url.substring(rootUrl.length);
		  				tmp =  "/"+tmp.substr(0,tmp.indexOf("/")+1) ;
		  				if(exclusions.contains(tmp))
		  					return;
		  			}
		  			this.url = [url.substr(0,url.length - 3), ".js?version=", appVersion].join("");
		  			//添加服务的rest缓存
	  			}else if(this.type.toUpperCase() == "GET" && serviceCacheList && url.indexOf("services/") != -1){
	  				
		  			var service=config.Service,
		  			serviceCache=service.serviceCache||(service.serviceCache = new Ccay.HashMap());
		  			$(serviceCacheList).each(function(i,cacheVO){
		  				try{   
				  			var  regex =serviceCache.get(cacheVO.moduleName)
				  			 if(!regex){
				  			 	regex = new RegExp(cacheVO.urlPattern);
				  			 	serviceCache.put(cacheVO.moduleName,regex);
				  			 }
				  			 if(regex.test(url)){
				  				that.url = [url,url.indexOf("?") == -1?"?" : "&","ccayVersion=",cacheVO.version].join("")
				  			 	return false; 
				  			 }
				  			 
			  			 }catch(ex){//
			  			 	Ccay.Log.error(ex);
			  			 }
		  			})
		  		//add end;
		  			}else if(appVersion && url.indexOf(".html")!=-1){
		  				var splitUrl = url.split("?");
		  				this.url = [splitUrl[0],"?version=",appVersion,splitUrl[1]?"&"+splitUrl[1]:""].join("");
		  			}else if(workspaceVO.config.i18nVersion && url.indexOf("servlet/i18n")!=-1){
		  				//debugger;
		  				this.url = [url,"&version=",workspaceVO.config.i18nVersion].join("");
		  			}
	  			 
	  	}	
	  	 
	  }
	  
});


/** Ccay配置库 */
Ccay.Config = {
	Service:{
		languageUrl:"servlet/switchLanguage?backUrl={0}&switchTo={1}",
		changeRole : "servlet/changeRole?backUrl={0}&currentrole={1}"
	},
	Global:{
		/**设定一个数字上限，当模块加载 到指定上限时候，刷新整个页面*/
		refresh:0,
		catchErr : workspaceVO.envBean.profileName == "dev" ? false : true, //开关是否捕获掉ajax回调中的素有异常
		appVersion:workspaceVO.config.appVersion,
		rootUrl : document.location.protocol + "//" +document.location.host + workspaceVO.contextPath 
	},
	/** 格式化数据 */
	Format: {
		/** 框架内部代码统一时间格式，内部使用，请不要改动 */
		sysDate: 'yyyy-MM-dd'
		,sysDateTime: 'yyyy-MM-dd hh:mm:ss'
		/** 统一时间格式 */
        ,date: 'yyyy-MM-dd' 
        /** 统一日期日期格式 */ 
        , datetime: 'yyyy-MM-dd hh:mm:ss'
        /** 统一日期格式 */
        , datehm: 'yyyy-MM-dd hh:mm'
        , dateym:'yyyy-MM'
        , months:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
		, MDFormat : ''
        /** decimal小数的位数 */
        , decimalfraction: 2
        , valueSplit:','
        , textSplit:'; '
        //货币符号，占位符格式，例："${0} 或者 模板兼容模式 $[currency]"
        , currencyFlag:null
        //文件大小单位
        , fileSize:["B","KB","MB","GB","TB"]
		, fileSizeFraction: 2
		//, dateSplit:["-","/"]
		,yes : 'Yes'
		,no : "No"
		,valueField:'value'
		,displayField:'text'
    },
    /** 规则定义，正则配置 */
    Regular:{
    	sysDate:/^(\d{4})(-|\/)(\d{1,2})(-|\/)(\d{1,2})$/,
    	sysDateTime:/^(\d{4})(-|\/)(\d{1,2})(-|\/)(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/,
    	serverDate : /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}\+\d{4}$/,
    	//sysDateHM:/^(\d{4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2})$/,
    	/** 统一时间格式 */
        date: /^(\d{4})(-|\/)(\d{1,2})(-|\/)(\d{1,2})$/
        ,datetime:/^(\d{4})(-|\/)(\d{1,2})(-|\/)(\d{1,2}) (\d{1,2}):(\d{1,2})(:(\d{1,2})|)$/ 
        ,datehm:/^(\d{4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2})$/
        ,dateym:/^(\d{4})(-|\/)(\d{1,2})$/
    }
    /** 日志级别定义 */
    ,Log:{
    	debug:1,
    	info:2,
    	warn:3,
    	error:4
    },
    /** 本地化模块常量定义 */
    Local:{
    	/** 中文 */
    	zh:"zh_CN",
    	/** 英文 */
    	en:"en_US",
    	/** 记录语境的cookie key */
    	cookie:"language"
    },

    Panel:{
    	 /** ajax 方式 load 页面定义 */
    	main:"ccayContentPanel", 
    	centent:"ccayContentPanel",
    	/** 特殊iframe模式 载入iframe的div id定义 */
    	frame:"ccayloadIframe",
    	leftPanel:"#leftPanel",
    	globalLoading:'#ccayContentPanel'
    },
    PushMsg:{
    	open: workspaceVO.config.enablePushMessage,
    	delayLoad:2000, //进入系统后延迟多久加载 推送消息数据
    	service:"services/ccay/message/list",//读取消息的路径
    	viewService:"services/ccay/message/list/page/{0}/{1}",
    	markReadedService:"services/ccay/message/update/read/{0}",
    	maxTime:10, /** 进入模块页面后 主动请求监听服务端推送消息次数，请求到达该上线后，不再请求，除非刷新页面或转到其他页面  */
    	alternation:30000,  /** 配置毫秒数  每隔多少时间，去请求服务端推送消息 */
    	delayHide:Math.min(Math.max(workspaceVO.config.delayHide,10000),60000)||15000, //毫秒  消息推送提示框存在时间
    },
    Helper:{
    	open:workspaceVO.config.enableDynamicHelp, //配置应用全局的动态帮助开关
    	service:"services/ccay/web/support/helper/list/user", //读取用户帮助的服务路径
    	readService:"services/ccay/web/support/helper/mapping",//标记已读的servcie服务路径
    	delayInit:1000 //延迟加载帮助的毫秒数
    },
    InfoTip:{
    	open:workspaceVO.config.enableInfoTip, //配置在线帮助开关
    	service:"services/ccay/web/support/helper/list/info", //读取在线帮助信息的服务路径
    	contentService:"services/ccay/htmlarea/query/list/InfoTip/{0}", // 查找配置在线帮助信息的对应的富文本内容的服务路径
    	templateService:"services/ccay/htmlarea/query/list/InfoTipTemplate/{0}", 
    	editService:"services/ccay/htmlarea/infotip/single", // 创建和更新的服务路径
    	deleteService:"services/ccay/htmlarea/infotip/d/single", // 删除的服务路径
    	delayInit:200 // 页面生成图标的延时毫秒数
    },
    Personalized:{
    	open:true, //全局个性化设置是否开启
    	delay : 5000 //延时保存时间
    },
    Forward:{
 		/** 延迟时间 */
 		delayTime:1000,
 		/** 此次点击，距离上一次跳转的时间间隔多少ms，就无需加入延迟中 */
 		lastTimeSpace : 2000
    },
    dataFormatter:{
    	zh_CN:{
    		date: 'yyyy-MM-dd',
    		dateym:'yyyy-MM',
    		datehm: 'yyyy-MM-dd hh:mm',
    		datetime: 'yyyy-MM-dd hh:mm:ss'
    	},
    	en_US:{
    		date: 'dd/MM/yyyy',
    		dateym:'MM/yyyy',
    		datehm: 'dd/MM/yyyy hh:mm',
    		datetime: 'dd/MM/yyyy hh:mm:ss'
    	}
    },
    HtmlRegular:{
    	annotation : /<!--\s*([\s\S]*?)\s*-->/g,
    	script : /<script([^>]*)\/>|<script([^>]*)>\s*([\s\S]*?)\s*<\/script>/gi,
		scriptUrl : /src\s*=\s*(['"])([\s\S]*?)\1/i,
		css : /<link([^>]*)>|<style([^>]*)>\s*([\s\S]*?)\s*<\/style>/gi,
		cssUrl : /href\s*=\s*(['"])([\s\S]*?)\1/i,
		elementEvent : /on[a-z]*\s*=\s*(['"])([\s\S]*?)\1|on[a-z]*\s*=\s*.*\s*/gi,
		hrefEvent : /href\s*=\s*(['"])(javascript:[\s\S]*?)\1/gi
    }
}

/** Ccay UI 配置库 */
Ccay.UI.Config = {
	/** 权限标签配置 */
	Permission:{
		Class:{has:".hasPermission",no:".noPermission"},
		Model:{has:"hasPermission",no:"noPermission"},
		attr:"ccayPermission"
	},
	messageType:{error:"error",success:"success",warn:"warn",question:"question"},
	messageTitle:{title:"ccay.common.message.msgtitle",confirm:"ccay.common.message.confirm"}
	,topBox:{
		top:150,width:200,timer:2000,title:"ccay.common.message.msgtitle"
	}
	,loading:{
		top:150,width:150,title:"ccay.common.message.msgtitle",content:'ccay.common.message.loading'
	}
	,button:{
		input:'<input type="button" value="{0}" {1} {2}/>',
		img:'<a class="ccay-icon {0} {4}" {1} title="{2}" {3}></a>',
		link:'<a class="ccay-link-btn {3}" {0} {2}>{1}</a>',
		imgBtn:'<span class="ccay-button {4}" {3} {1}><a class="ccay-icon {0}"></a><label>{2}</label></span>'
	},
	newButton:{
		input:'<input type="button" value="${text}" class="${css}" ${prop} />',
		img:'<a class="ccay-icon ${icon} ${css}" title="${text}" ${prop} ></a>',
		link:'<a class="ccay-link-btn ${css}" ${prop} >${text}</a>',
		imgBtn:'<span class="ccay-button ${css}" ${prop} ><a class="ccay-icon ${icon}"></a><label>${text}</label></span>'
	},
	datepicker:{
		date:"%d/%m/%Y",
		datetime:'%d/%m/%Y %H:%M'
	},
	pager:{
		pageSizes:[10,15,50,100,200,500],
		defaultSize:15,
		mode:'number',
		showMessage:true,
		maxPages: 2147483647 //最大分页数支持到java整数的最大值
	},
	dropdown:{
		comboDelay:1000,
		suggestDelay:2000,
		suggestNum:80,
		maxParseMatch:30,
		autoConnect : true,
		clearRepeating:false
	},
	igrid:{
		treeLoadDeep: 1,
		wrapHead: true,
		headTip: false,
		customSetting: false,
		rowHeight: 24
	},
	grid:{
		columnMinWidth:25   //gtgrid 的列能拉到最小的宽度，为0的时候，则是按照列名span自适应
	},
	//add 2014.1.1 hufneg 00214522 添加dialog按按钮位置全局设置,excel导入导出igrid分组支持全局开关配置
	dialog:{
		btnAlign : "right"
	},
	excel:{
		rowRender:"group"
	}
	//end add
};

Ccay.Layout={};
Ccay.Layout.Config={

    /** 页头页尾配置 */
 	MenuSettings:{
 		user_id: workspaceVO.user && workspaceVO.user.userCN, 
 		base: {header_id: "head_div",footer_id: "foot_div"},
		is_narrow: true, 
		loutout: {	en: {name: 'Logout',url:'servlet/logout'},cn: {name: "注销",url: 'servlet/logout'}},
		switch_lan: {en: {name: '中文',url: "javascript:Ccay.Local.changeLanguage('zh_CN')"},cn: {name: "English",url: "javascript:Ccay.Local.changeLanguage('en_US')"}},
		app_setting: {en: {name: 'Ccay 5'},cn: {name: 'Ccay 5'}}
		},
 	/** 左菜单配置 */
 	LeftMenu:{ 
 		/** 左菜单树面板div id */
 		panel:"main-menu-inner",
 		/** 左菜单链接跳转方式 */
 		Target:{
 			/** 页面本身上跳转 */
 			self:"_self",
 			/** 打开新窗口模式跳转 */
 			blank:"_blank",
 			/** 在页面右侧载入iframe方式 */
 			frame:"_contentFrame",
 			
 			website:"_website"
 		}
 	},
 	resBean:[]
 	
 	
};

/**  定义一些下面js可能需要用到的全局变量  */
window.ws_res_path=workspaceVO.envBean.shortResPath+"/";
window.Calendar={};
window.contextPath=workspaceVO.contextPath;


/** validator多语言设置 */
Ccay._fnInitI18nMsg4Validator=function(){
	$.extend($.validator.messages, {});
}

/** 分页插件 多语言信息初始化 */
Ccay._fnInitI18nMsg4Pager=function(){
	Ccay.UI.Config.pager.text={
		pageSizes: $i18n("ccay.common.pager.pageSizes")
        , curPage: $i18n("ccay.common.pager.curPage")
        , first: $i18n("ccay.common.pager.first")
        , prev: $i18n("ccay.common.pager.prev")
        , next: $i18n("ccay.common.pager.next")
        , last: $i18n("ccay.common.pager.last")
        , goTo: $i18n("ccay.common.pager.goTo")
        , message:$i18n("ccay.common.pager.message")
        , total:$i18n("ccay.common.pager.total")
    };
}

/** 其它 多语言信息初始化 */
Ccay._fnInitI18nMsg4Others=function(){
	Ccay.UI.Config.dropdown.text={
		suggestNum: $i18n('ccay.common.suggest.msg'),
		noMatch:$i18n('ccay.common.suggest.noMatch')
    };
    
	Ccay.Config.Format.yes = $i18n("ccay.common.label.yes");
	Ccay.Config.Format.no = $i18n("ccay.common.label.no");
}

/**
 * @description jquery.i18n.properties 插件配置初始化，辅助完成ui本地化
 */
$.i18n.properties({
	name : 'i18n' + "?lang=" + workspaceVO.currentLanguage, // 使用资源文件名称
	path : './servlet/', // 资源文件所在路径
	mode : 'map', // 调用方式，可用值‘vars’ (default) 变量方式, ‘map’map方式 or ‘both’两者均支持
	language : workspaceVO.currentLanguage.substr(0, 2), // 语言
	dataType : "json",
	callback : function() {
		$i18n = $.i18n.prop;
	}
});

